package com.grupobbva.seguridad.web.servlet.action;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.grupobbva.seguridad.domain.Perfil;
import com.grupobbva.seguridad.domain.Usuario;
import com.grupobbva.seguridad.util.Constante;
import com.grupobbva.seguridad.util.ListaDisplayTag;
import com.grupobbva.seguridad.util.NegocioException;
import com.grupobbva.seguridad.util.ResultadoOperacion;
import com.grupobbva.seguridad.util.ResultadoOperacionError;
import com.grupobbva.seguridad.util.ResultadoOperacionExcepcion;
import com.grupobbva.seguridad.util.Util;

public class BaseController {

	public String getRelativeURL(String key) {
		return Util.getRelativeURL(key);
	}
	public String getRelativeAjaxURL(HttpServletRequest request, ResultadoOperacion resultado) {
		request.setAttribute("mensaje", resultado.serializar());
		return Util.getRelativeURL("ajax");
	}
	public String getRelativeAjaxURL() {
		return Util.getRelativeURL("ajax");
	}

	public ResultadoOperacion guardarMensajeError(HttpServletRequest request, Exception exception) {
		ResultadoOperacion resultado = null;			
		if(exception instanceof NegocioException) {
			resultado = new ResultadoOperacionError(exception.getMessage());
		} else {
			resultado = new ResultadoOperacionExcepcion(exception);
			exception.printStackTrace();
		}
		request.setAttribute("mensaje", resultado.serializar());
		return resultado;
	}
	
	public Usuario getUsuario(HttpServletRequest request) {
		return (Usuario) request.getSession().getAttribute(Constante.USUARIO);
	}
	public void setUsuario(HttpServletRequest request, Usuario usuario) {
		request.getSession().setAttribute(Constante.USUARIO, usuario);
	}
	
	public Perfil getPerfil(HttpServletRequest request) {
		return getUsuario(request).getPerfil();
	}
	
	public List<Long> getAccesoAplicacionIds(HttpServletRequest request) {
		return getUsuario(request).getAplicacionIds();
	}
	
	public static String getNavigationMain(Usuario usuario) {
    	if(usuario.getPerfilEmpresa().getPerfil().getAplicacion().getMenuExpandido() != null && usuario.getPerfilEmpresa().getPerfil().getAplicacion().getMenuExpandido()) {
    		return "main";
    	}
    	return "frame";
	}
	
    ////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////RequestHelper////////////////////////////////////////	  
    ////////////////////////////////////////////////////////////////////////////////////////////
	public String getParameterString(HttpServletRequest request,String key) {
		String parametro = request.getParameter(key);
		String resultado = (parametro==null || (parametro).trim().equals(""))?null:
						parametro.trim();//.toUpperCase()
		return resultado;
	}
	public Long getParameterLong(HttpServletRequest request,String key) {
		String parametro = request.getParameter(key);
		try {
			Long resultado = (parametro==null || (parametro).trim().equals(""))?null:new Double(parametro.trim()).longValue();
			return resultado;
		} catch (Exception e) {
			return null;
		}
	}
	public Double getParameterDouble(HttpServletRequest request, String key) {
		String parametro = request.getParameter(key);
		Double resultado = (parametro==null || (parametro).trim().equals(""))?null:new Double(parametro.trim().replaceAll(",", ""));
		return resultado;
	}
	public Date getParameterDate(HttpServletRequest request,String key) {
		String fecha = request.getParameter(key);
		Date dFecha = null;
	
		if (fecha != null && fecha.length() == 10) {
			try {
				long lTime = new SimpleDateFormat("dd/MM/yyyy").parse(fecha).getTime();
				dFecha = new Date(lTime);
			} catch(Exception e) {
		        return null;
			}
		}
		return dFecha;
	}
    ////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////Paginacion//////////////////////////////////////////	  
    ////////////////////////////////////////////////////////////////////////////////////////////
	public Integer getNroPaginaActual(HttpServletRequest request) {
		String pagina = request.getParameter("page") == null || "".equals(request.getParameter("page")) ? "1" : request.getParameter("page");
		return Integer.parseInt(pagina);
	}
	public ListaDisplayTag getListaDisplayTag(HttpServletRequest request, Integer nroRegistros, Integer nroPaginaActual, List lista) {
		ListaDisplayTag displayTag = new ListaDisplayTag();
		displayTag.setFullListSize(nroRegistros);
		displayTag.setList(lista);
		displayTag.setObjectsPerPage(Constante.CANTIDAD_REG_X_PAG);
		displayTag.setPageNumber(nroPaginaActual);
		
		request.setAttribute("tamanoPagina", Constante.CANTIDAD_REG_X_PAG);
		
		return displayTag;
	}
}
